0287. 类型系统基础知识
1. 🎯 本节内容
- 类型系统基础知识简介
2. 🫧 评价
类型系统基础知识笔记汇总:
| 笔记 | 简介 |
|---|---|
| 0018.boolean 类型 | TypeScript 中的 boolean 类型严格表示逻辑值 true 或 false,与 JavaScript 不同,它不允许将非布尔值(如数字、字符串等)直接赋值给 boolean 类型变量,必须使用 Boolean() 函数或 !! 运算符进行显式转换以确保类型安全。 |
| 0019.string 类型 | TypeScript 中的 string 类型是表示文本数据的基本类型,严格涵盖普通字符串和模板字符串,确保只有字符串值可以赋给该类型变量,提供类型安全保证。 |
| 0020.number 类型 | TypeScript 的 number 类型是表示数字的基本类型,涵盖整数、浮点数及特殊值(Infinity、-Infinity、NaN),支持完整的数学运算并提供严格的类型安全保证。 |
| 0021.bigint 类型 | TypeScript 的 bigint 类型是 ES2020 引入的用于表示任意精度大整数的特殊类型,通过在数字后添加 n 声明(如 123n),与 number 类型完全不兼容且要求编译目标不低于 ES2020。 |
| 0022.symbol 类型 | TypeScript 的 symbol 类型是表示唯一标识符的原始类型,其子类型 unique symbol 用于表示特定的 symbol 值,只能通过 const 声明且不可修改,确保类型系统能识别单个 symbol 值的唯一性,常用于避免属性名冲突和实现更精确的类型检查。 |
| 0023.object 类型和 Object 类型 | TypeScript 中大写的 Object 类型几乎接受所有值(除 null/undefined),包含原始类型且过于宽泛不推荐使用;而小写的 object 类型(TS 2.2+)仅接受非原始类型(对象、数组、函数等),提供更精确的类型约束,是表示对象类型时的推荐选择。 |
| 0024.undefined 类型和 null 类型 | TypeScript 中 undefined 和 null 是特殊原始类型,推荐始终启用 strictNullChecks 并通过可选链 ?. 和空值合并 ?? 安全处理空值,而非空断言操作符 ! 虽可简化代码但存在运行时风险,应谨慎使用。 |
| 0047.包装对象类型 | TypeScript 中应始终使用小写的原始类型(string、number、boolean)而非大写的包装对象类型(String、Number、Boolean),因为后者性能较差、行为异常且 TypeScript 官方明确不推荐使用。 |
| 0025.字面量类型 | TypeScript 字面量类型允许将具体值(如 'success'、42、true)用作类型,通过联合类型、as const 断言和模板字符串字面量实现精确约束,相比 enum 更轻量且推荐在现代项目中使用。 |
| 0026.联合类型 | TypeScript 联合类型(|)表示值可为多种类型之一,通过类型守卫进行类型收窄后安全访问,是实现类型安全多态和状态建模的核心机制,广泛应用于字面量类型组合、可选值处理等场景。 |
| 0027.交叉类型 | TypeScript 交叉类型(&)表示值必须同时满足多个类型的全部特性,通过合并属性创建更复杂的类型结构,常用于对象组合、混入模式和类型扩展,但需谨慎避免同名属性冲突导致 never 类型问题。 |
| 0028.type 关键字 | TypeScript 的 type 关键字用于创建类型别名,能够为原始类型、对象、联合类型、交叉类型等定义可读性更强的名称,特别适合处理复杂类型结构和类型运算。 |
| 0029.typeof 运算符 | TypeScript 扩展了 JavaScript 的 typeof 运算符,使其不仅能进行运行时类型检查,还能在类型层面查询值的静态类型,特别适用于配合 as const 保留字面量类型信息,是实现类型安全和精确类型推导的关键特性。 |
| 0030.类型作用域 | TypeScript 类型作用域遵循 JavaScript 词法作用域规则,由模块系统控制类型可见性范围,interface 支持声明合并而 type 不能重定义,现代项目应使用模块化避免全局作用域污染。 |